﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YouDaoNotesCodes
{    
    #region 定义虚类方法
    /// <summary>
    /// 定义虚方法
    /// </summary>
    class Animal
    {
        public Animal()
        {
        }
        public virtual void VirtualMethod()//虚方法
        {
            Console.WriteLine("动物的叫声:");
        }
        
    }
    #endregion

    #region 定义抽象类方法
    /// <summary>
    /// 定义抽象类，注意抽象类可包含普通方法和抽象方法
    /// </summary>
    abstract class AbstractAnimal
    {
        public abstract void AbstractMethod();//抽象方法
        public void NormalMethod()//普通方法
        {
            Console.WriteLine("抽象类中的普通方法！");
        }
    }
    #endregion

    #region 定义一个接口
    interface InterFace//接口类=抽象类，且方法都是抽象方法相当于接口
    {
        void Eat();
    }
    #endregion

    #region 虚方法调用
    class cat : Animal
    {
        public override void VirtualMethod()
        {
            base.VirtualMethod();
            Console.WriteLine("喵~");
        }

    }
    #endregion

    #region 抽象类中抽象方法调用
    class dog : AbstractAnimal
    {
        public override void AbstractMethod()
        {
            Console.WriteLine("抽象类：喵喵~");
        }
    }
    #endregion

    #region 接口调用
    class pig : InterFace
    {
        public  void Eat()
        {
            Console.WriteLine("接口调用1");
        }
    }
    #endregion
    //class Program
    //{
        //static void Main(string[] args)
        //{
        //    cat cat = new cat();
        //    dog dog = new testMethod.dog();
        //    pig pig = new testMethod.pig();

        //    cat.VirtualMethod();//虚方法
        //    dog.AbstractMethod();//抽象类-抽象方法
        //    dog.NormalMethod();//抽象类-普通方法
        //    pig.Eat();//接口类
        //    Console.ReadKey();
        //}
    //}
}
